package creationPattern.Singleton;

/**
 * 静态内部类
 *      1、利用静态内部类的特性:外部类使用到了内部类的属性或者方法时,才会加载内部类;
 *      2、实现延时加载、线程安全、代码简单
 *      3、静态内部类里面实际上也是一个饿汉加载,只是类不被加载,它没办法创建实例;
 */
public class Singleton_05 {
    // 1.私有构造方法
    private Singleton_05() {
        if (null != SingletonHandler.instance){
            throw new RuntimeException("非法访问构造方法");
        }
    }

    // 2.创建静态内部类
    private static class SingletonHandler{
        // 3.创建私有的静态的全局对象
        private static Singleton_05 instance = new Singleton_05();
    }

    // 4.提供外部方法
    public static Singleton_05 getInstance(){
        return SingletonHandler.instance;
    }
}
